#ifndef TRAVELLABEL_H
#define TRAVELLABEL_H

#include <QLabel>
#include <QMap>
#include <QPainter>
#include <QPointF>
#include <QVector>
#include <QTimer>
#include <QMouseEvent> // 添加处理鼠标事件的头文件

class TravelLabel : public QLabel
{
    Q_OBJECT

public:
    explicit TravelLabel(QWidget *parent = nullptr);

    // 设置位置数据
    void setPositionsMap(const QMap<QString, QPointF> &positionsMap);
    void setCentralPosition(const QPointF &centralPosition);
    void setOrderedNames(const QStringList &names);
    // 设置缩放因子
    void setScaleFactor(double factor);

    // 设置需要连线的点序列
    void setConnectionSequence(const QVector<int> &sequence);

    // 控制绘制点和连线的开关
    void setDrawPoints(bool enable);
    void setDrawLines(bool enable);
    int findInterestByLocation(int x,int y);
    void setPointColor(QVector<QColor> pointColor);

signals:
    void coordinatesClicked(int x, int y);  // 添加一个信号，用于发送点击的坐标

protected:
    void paintEvent(QPaintEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override; // 声明鼠标点击事件处理函数

private slots:
    void updateLineAnimation();

private:
    QMap<QString, QPointF> positionsMap;
    QVector<QPointF> adjustedPositionsList;  // 存储调整后的点，使用顺序存储
    QStringList orderedNames;  // 景点名称的顺序
    QPointF centralPosition;
    double scaleFactor = 10000;  // 缩放因子
    QVector<int> connectionSequence ;  // 需要连线的点序列
    bool drawPoints = true;  // 是否绘制点
    bool drawLines = true;  // 是否绘制连线

    int currentLineIndex = 0;  // 当前绘制线段的索引
    QTimer *lineAnimationTimer;  // 定时器用于控制线段绘制动画

    void updateAdjustedPositions(); // 更新调整后的点位置
    QVector<QColor> pointColor;
};
#endif // TRAVELLABEL_H
